#ifndef __APP_POOL_H__
#define __APP_POOL_H__

#include "pthread.h"
#include <fcntl.h>
#include <sys/stat.h> 
#include <mqueue.h>
#include "errno.h"
#include "log.h"


#define QUEUE_NAME "/Task_queue" //消息队列名称
#define QUEUE_LENGTH 10  //消息队列 消息个数
#define QUEUE_MSG_SIZE 1024//单条消息 可容纳最大字节数
#define PTHREAD_NUM 5// 线程数

typedef struct{
    void*(*Task_fun)(void*);//执行任务
    void* arg;//执行任务的参数
}Task;


//线程池的核心 就是利用了 消息队列的先进先出原理 使得线程连表中的线程能不断的从消息队列中执行任务
//一有空闲线程就会从消息队列中获取数据来执行对应任务
//线程池中线程从消息队列中获取的数据为 带有 函数指针 和 函数参数的结构体
//消息队列传递的数据格式为 : 结构体 : 函数指针void*(void*),函数参数 void*

//初始化线程列表 和 消息列表
int APP_Pool_Init(void);

//提交线程执行任务 即 发送消息队列信息
int APP_Pool_Submit_Task(Task* task);

//销毁线程池
int APP_Pool_Destroy(void);

#endif
